import banco.*;
import org.omg.CORBA.DoubleHolder;

public class ServidorAutoCaixaImplementacao extends caixa_eletronicoPOA{
    private static String nomeBanco = nome_banco.value;
    private ServidorDOA servidorDOA = null;

    public ServidorAutoCaixaImplementacao() {
        servidorDOA = new ServidorDOA();
    }
    
    /**    
     * Função que retorna mensagem de boas-vindas
     **/
    public String boas_vindas() {
        return "BEM-VINDO AO " + nomeBanco + "!";
    }

    /*
     * Função que retorna mensagem de boas-vindas
     */
    public double saldo(int c) throws conta_inval {
        double aux = servidorDOA.getSaldoConta(c);
        if (aux == -99){
            throw new banco.conta_inval (c);
        }else{
            return aux;    
        }        
    }
        
    public void extrato(int c, transacoesHolder t, DoubleHolder saldo) throws conta_inval {        
        transacao[] historico = null;
        
        historico = servidorDOA.extrato(c);
        
        if (historico == null){
            t.value = historico;
            System.out.println("Historico sem nada!");
        }else{                 
            t.value = historico;
            System.out.println("Historico com alguma coisa!");
            System.out.println("===== EXTRATO =====");
            System.out.println("Conta.: " + c);
            System.out.println("DATA     -    TRANSACAO    -   VALOR");
            for (int i = 0; i < historico.length; i++) {                
//                String show = historico[i].data + "  - " + historico[i].descricao;                
//                for (int j = show.length(); j < 27; j++) {                    
//                    show.concat(".");                    
//                    System.out.println(j + " " + show);
//                }
//                show.concat(".-  " + historico[i].quantia);
//                System.out.println(show);
//                show = "";
                System.out.println(historico[i].data + " - " + historico[i].descricao + " - " + historico[i].quantia);
            }
            return;
        }
    }
    
    public void investimento(int c, aplicacao apl, double v) throws conta_inval, saldo_insuf {
        servidorDOA.investimento(c, apl, v);            
    }

    /*
     * Função que retorna mensagem de boas-vindas
     */
    public void tranferencia(int origem, int destino, double v) throws conta_inval, saldo_insuf {
        if (servidorDOA.transferencia(origem, destino, v) == false){
            throw new conta_inval();
        }
    }
    
    /*
     * Função que retorna mensagem de boas-vindas
     */
    public void saque(int c, double v) throws conta_inval, saldo_insuf {        
        if (servidorDOA.saque(c, v) == false) {
            throw new conta_inval();    
        }        
    }
    
}
